package org.example;

/**
 * @author 甜圆
 * @version v1.0.1
 * @date 2025/9/24 10:56
 * @package org.example
 * @copyright 甜圆
 */
import java.util.HashMap;
import java.util.Objects;

class Student {
    private String id;  // 学生学号，用于判断是否为同一个学生

    public Student(String id) {
        this.id = id;
    }

    // 只重写equals：认为学号相同的学生是同一个人

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(id, student.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }


    // 默认hashCode()基于对象内存地址计算，不同对象哈希值不同
}

public class Test2 {
    public static void main(String[] args) {
        Student s1 = new Student("1001");  // 学号1001的学生
        Student s2 = new Student("1001");  // 另一个学号1001的学生对象

        // 按照equals()定义，s1和s2是"相等"的
        System.out.println("s1.equals(s2) = " + s1.equals(s2));  // 输出: true

        // 但它们的hashCode不同（因为未重写）
        System.out.println("s1.hashCode() = " + s1.hashCode());
        System.out.println("s2.hashCode() = " + s2.hashCode());  // 与s1不同

        // 在HashMap中存储和查找的问题
        HashMap<Student, String> map = new HashMap<>();
        map.put(s1, "张三");  // 存入s1

        // 尝试用s2查找，预期能得到"张三"，但实际返回null
        System.out.println("map.get(s2) = " + map.get(s2));  // 输出: null
    }
}
